package core

import (
	"context"
	"gin_study_blog/common"
	"github.com/go-redis/redis/v8"
	"github.com/sirupsen/logrus"
	"time"
)

func ConnectRedis() *redis.Client {
	return InitRedis(0)
}

func InitRedis(db int) *redis.Client {
	redisConfig := common.Config.Redis
	rdb := redis.NewClient(&redis.Options{
		Addr:     redisConfig.Addr(),
		Password: redisConfig.Password,
		DB:       db,
		PoolSize: redisConfig.PoolSize,
	})

	_, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
	defer cancel()
	_, err := rdb.Ping(context.Background()).Result()
	if err != nil {
		logrus.Errorf("redis 连接失败 %s", redisConfig.Addr())
		return nil
	}
	return rdb
}

//type RedisClient struct {
//	client *redis.Client
//	ctx    context.Context
//}

// InitRedis
/** 使用方法
redisClient := InitRedis()
redisClient.Set()
redisClient.Get()
*/
//func InitRedis() *RedisClient {
//	// 创建 redis实例客户端
//	redisConfig := common.Config.Redis
//	client := redis.NewClient(&redis.Options{
//		Addr:     redisConfig.Addr(),
//		Password: redisConfig.Password,
//		DB:       0,
//		PoolSize: redisConfig.PoolSize,
//	})
//
//	// 创建上下文
//	ctx := context.Background()
//
//	// 检查是否连接成功
//	_, err := client.Ping(ctx).Result()
//	if err != nil {
//		logrus.Errorf("redis 连接失败 %s", redisConfig.Addr())
//		panic(err)
//		return nil
//	}
//
//	return &RedisClient{
//		client: client,
//		ctx:    ctx,
//	}
//}

// Set 设置
//func (rc RedisClient) Set(key string, value interface{}, expiration time.Duration) error {
//	err := rc.client.Set(rc.ctx, key, value, expiration).Err()
//	if err != nil {
//		return err
//	}
//	return nil
//}
//
//// Get 获取键值对
//func (rc RedisClient) Get(key string) (string, error) {
//	value, err := rc.client.Get(rc.ctx, key).Result()
//	if err == redis.Nil {
//		return "", fmt.Errorf("键 '%s' 不存在", key)
//	} else if err != nil {
//		return "", err
//	}
//	return value, nil
//}
